package com.linkgie.galaxyframework.persistence.data;

import java.util.function.Consumer;

/**
 * 正则表达式选项；
 */
public enum RegexOptions {

    /**
     * 忽略大小写；
     */
    CASE_INSENSITIVE(1),

    /**
     * 允许点字符（即.）匹配所有字符，包括换行符。
     */
    DOTALL(2),

    /**
     * 对于包含锚点的模式（即 ^ 表示开头，$ 表示结尾），在每行的开头或结尾匹配具有多行值的字符串。
     * <p>
     * 如果没有此选项，这些锚点将匹配字符串的开头或结尾。
     */
    MULTILINE(4);

    public final int VALUE;

    RegexOptions(int value) {
        this.VALUE = value;
    }
    

    public static int getOptions(RegexOptions... options) {
        int value = 0;
        for (RegexOptions option : options) {
            value |= option.VALUE;
        }
        return value;
    }

    public static boolean hasOption(int options, RegexOptions option) {
        return (options & option.VALUE)!= 0;
    }


    public static void processOptions(Consumer<RegexOptions> consumer, RegexOptions...options) {
        int values = getOptions(options);
        RegexOptions[] allOptions = RegexOptions.values();

        for (RegexOptions option : allOptions) {
            if (hasOption(values, option)) {
                consumer.accept(option);
            }
        }
    }

}
